import {getRequest} from "@/utils/api";

//初始化菜单 函数
export const initMenu=(router,store)=>{

    //判断 routes(存放菜单信息的数组) 长度>0 说明
    //已经初始化过菜单 不再进行初始化
    if(store.state.routes.length>0){
        return;
    }

    //数组当中 如果没数据 请求 api接口地址
    getRequest('/system/config/menu').then( data=>{
        //判断 是否 回执了数据
        if(data){
            //如果回执数据 格式化数据
            let ftmRouters=formatRoutes(data);
            //把 菜单地址信息 添加路由中
            router.addRoutes(ftmRouters);
            //再把菜单数据 存放到vuex 做数据集中管理
            store.commit('initRoutes',ftmRouters)
        }

    }).catch(error=>{
        console.log(error)
    })

}


export const formatRoutes=(routes)=>{

    let fmtRoutes=[]; //用户存存储 格式化好的数据
  //  [{}]
    routes.forEach(router=>{
        //格式化处理数据 let  var
        let {
            path,         //组件路径
            component,   //组件
            name,       //组件名
            iconCls,   //图标
            children,   //子组件
            meta   //参数 标识
        }=router;
        //如果有子组件 并且子组件 类型是一个数组 instanceof 判断类型
        if(children&&children instanceof Array){
            //递归 写法
            children=formatRoutes(children)
        }
        //封装 json 对象数据 存放到fmtRoutes数组
        let fmtRouter= {
            path:path,
            name:name,
            iconCls:iconCls,
            children:children,
            meta:meta,
            component(resolve){  // 渲染 vue 页面 resolve 读取页面参数
                //根据 组件名开头字母判断 组件读取路径
                if(component.startsWith('Home')){
                    require(['../views/'+component+'.vue'],resolve);
                }else if(component.startsWith('Emp')){
                    require(['../views/emp/'+component+'.vue'],resolve);
                }else if(component.startsWith('Per')){
                    require(['../views/per/'+component+'.vue'],resolve);
                }else if(component.startsWith('Sal')){
                    require(['../views/sal/'+component+'.vue'],resolve);
                }else if(component.startsWith('Sta')){
                    require(['../views/sta/'+component+'.vue'],resolve);
                }else if(component.startsWith('Sys')){
                    require(['../views/sys/'+component+'.vue'],resolve);
                }
            }
        }
        //格式化好的菜单数据 添加到数组中
        fmtRoutes.push(fmtRouter);
    })
    //返回菜单数组
    return fmtRoutes;
}
